﻿Public Class clsAdminPAQ
    Function EnviaAdminPAQ(ByVal Fecha As Date, ByVal CodigoConcepto As String, ByVal Folio As Integer, ByVal Serie As String, ByVal CodigoCte As String, ByVal RazonSo As String, ByVal CodigoAgente As String, ByVal CodigoProd As String, ByVal CodigoAlm As String, ByVal Unidades As Double, ByVal Precio As Double)
        'Declaracion de todas las variables a usar
        Dim lRet As Long
        Dim lStrValor As String
        Dim lIdDocumento As New Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString(SDK_AdminPAQ.kLongIdDocum)
        Dim lNumMovto As Integer
        Dim lfecha As String
        Dim lDoctoDe As Long = 4

        lIdDocumento.Value = Space(SDK_AdminPAQ.kLongIdDocum)

        'Formatear fecha
        lfecha = Format(fecha.Month, "00") & "/"
        lfecha = lfecha & Format(fecha.Day, "00") & "/"
        lfecha = lfecha & Format(fecha.Year, "0000")

        ' Inserta registro de documento
        lRet = SDK_AdminPAQ.fInsertarDocumento()
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Insertando documento"
            'fTerminaSDK()
            Exit Function
        End If
        ' Actualiza los campos del documento
        'Guarda fecha
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cFecha", Fecha)
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Insertando fecha"
            BorraYTermina(0)
            Exit Function
        End If
        'Guarda codigo del concepto
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cCodigoConcepto", CodigoConcepto)
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Insertando concepto"
            BorraYTermina(0)
            Exit Function
        End If
        'Busca cual es la serie del documento modelo, y busca el siguiente folio
        ' lRet = SDK_AdminPAQ.fSiguienteFolio(CodigoConcepto, Serie, Folio)
        'If lRet <> 0 Then
        'EnviaAdminPAQ = "NOERROR: Buscando serie y folio"
        'BorraYTermina(0)
        'Exit Function
        'End If
        'Guarda la serie
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cSerieDocumento", Serie)
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Insertando serie"
            BorraYTermina(0)
            Exit Function
        End If
        'Guarda el folio
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cFolio", Folio)
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Insertando folio"
            BorraYTermina(0)
            Exit Function
        End If
        'Verifica que el codigo del cliente exista
        lRet = SDK_AdminPAQ.fBuscaCteProv(CodigoCte)
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: No existe el cliente"
            BorraYTermina(0)
            Exit Function
        End If
        'Guarda codigo del cliente
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cCodigoCteProv", CodigoCte)
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Insertando codigo del cliente"
            BorraYTermina(0)
            Exit Function
        End If
        'Guarda razon social del cliente
        lStrValor = RazonSo
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cRazonSocial", RazonSo)
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Insertando razon social"
            BorraYTermina(0)
            Exit Function
        End If
        'Guarda rfc
        lStrValor = ""
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cRFC", "")
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Insertando RFC"
            BorraYTermina(0)
            Exit Function
        End If
        'Guarda CodigoAgente
        lStrValor = CodigoAgente
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cCodigoAgente", CodigoAgente)
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Insertando codigo agente"
            BorraYTermina(0)
            Exit Function
        End If
        ' Indicar al SDK que el documento va a tomar la dirección fiscal y de envio del cliente
        lStrValor = "1"
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cConDireccionFiscal", "1")
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cConDireccionEnvio", "1")
        'Guarda fecha de vencimiento
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cFechaVencimiento", lfecha)
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Insertando fecha vencimiento"
            BorraYTermina(0)
            Exit Function
        End If
        'Guarda Fecha Entrega Recepcion
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cFechaEntregaRecepcion", lfecha)
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Insertando fecha de recepcion"
            BorraYTermina(0)
            Exit Function
        End If
        'Tipo de moneda
        lStrValor = 1
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cIdMoneda", 1)
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Insertando Id Documento"
            BorraYTermina(0)
            Exit Function
        End If
        'Tipo de cambio de moneda
        lStrValor = 1
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cTipoCambio", 1)
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Insertando tipo de cambio"
            BorraYTermina(0)
            Exit Function
        End If
        'Otra vez la fecha del documento, la fecha de entrega recepcion
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cFecha", lfecha)
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Insertando fecha 1"
            BorraYTermina(0)
            Exit Function
        End If
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cFechaVencimiento", lfecha)
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Insertando fecha vencimiento 1"
            BorraYTermina(0)
            Exit Function
        End If
        lRet = SDK_AdminPAQ.fSetDatoDocumento("cFechaEntregaRecepcion", lfecha)
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Insertando recepcion 1"
            BorraYTermina(0)
            Exit Function
        End If
        ' Guarda los datos del documento
        lRet = SDK_AdminPAQ.fGuardaDocumento()
        If lRet <> 0 Then
            MensajeError(lRet)
            EnviaAdminPAQ = "NOERROR: Guardando Documento"
            BorraYTermina(0)
            Exit Function
        End If
        ' Obtiene el IdDocumento
        lStrValor = SDK_AdminPAQ.fLeeDatoDocumento("cidDocum01", lIdDocumento.Value, 11)
        If lStrValor <> 0 Then
            EnviaAdminPAQ = "NOERROR: Buscando ID documento"
            SDK_AdminPAQ.fBorraDocumento()
            Exit Function
        End If
        ' Guarda los renglones
        lNumMovto = 0
        'Verifica que el producto se haya especificado para insertar un nuevo movmiento y guardar los renglones
        If Len(Trim(CodigoProd)) > 0 Then
            lRet = SDK_AdminPAQ.fInsertarMovimiento()
            If lRet <> 0 Then
                EnviaAdminPAQ = "NOERROR: Insertando movimiento"
                SDK_AdminPAQ.fBorraDocumento()
                Exit Function
            End If
            ' Despues de insertar el movimiento cualquier error que ocurra entre esta insercion y el guardado
            ' debera de llamar al metodo fSDK_CancelarCambioMovimientos para que se deshaga la insercion
            ' Id del Documento
            lRet = SDK_AdminPAQ.fSetDatoMovimiento("cIdDocumento", lIdDocumento.Value)
            If lRet <> 0 Then
                EnviaAdminPAQ = "NOERROR: Insertando id documento"
                BorraYTermina(1)
                Exit Function
            End If
            ' Numero del Movimiento
            lNumMovto = lNumMovto + 1
            lStrValor = Trim(Str(lNumMovto * 100))
            lRet = SDK_AdminPAQ.fSetDatoMovimiento("cNumeroMovimiento", lStrValor)
            If lRet <> 0 Then
                EnviaAdminPAQ = "NOERROR: Insertando numero movimiento"
                BorraYTermina(1)
                Exit Function
            End If
            ' Codigo del Producto
            lRet = SDK_AdminPAQ.fSetDatoMovimiento("cCodigoProducto", CodigoProd)
            If lRet <> 0 Then
                EnviaAdminPAQ = "NOERROR: Insertando codigo producto"
                BorraYTermina(1)
                Exit Function
            End If
            ' Codigo del Almacen
            lRet = SDK_AdminPAQ.fSetDatoMovimiento("cCodigoAlmacen", CodigoAlm)
            If lRet <> 0 Then
                EnviaAdminPAQ = "NOERROR: Insertando codigo almacen"
                BorraYTermina(1)
                Exit Function
            End If
            ' Unidades
            lStrValor = Unidades
            lRet = SDK_AdminPAQ.fSetDatoMovimiento("cUnidades", lStrValor)
            If lRet <> 0 Then
                EnviaAdminPAQ = "NOERROR: Insertando unidades"
                BorraYTermina(1)
                Exit Function
            End If
            ' Precio

            lRet = SDK_AdminPAQ.fSetDatoMovimiento("cPrecio", Precio)
            If lRet <> 0 Then
                EnviaAdminPAQ = "NOERROR: Insertando precio"
                BorraYTermina(1)
                Exit Function
            End If
            'Importe extra= Dias
            'PARA KMS SERA DE UNO A DOS, SEGUN LA CANTIDAD
            lStrValor = 0 ' dgRegistro.Rows(i).Cells(3).Value.ToString() ' Trim(Str(Range("D" & Trim(Str(lRenglon))).Value))
            lRet = SDK_AdminPAQ.fSetDatoMovimiento("cimporte01", lStrValor)
            If lRet <> 0 Then
                EnviaAdminPAQ = "NOERROR: Insertando importe extra"
                BorraYTermina(1)
                Exit Function
            End If

            'El Neto se calcula en el SDK de AdminPAQ
            ' Descuento 1
            lStrValor = 0
            lRet = SDK_AdminPAQ.fSetDatoMovimiento("cDescuento1", lStrValor)
            If lRet <> 0 Then
                EnviaAdminPAQ = "NOERROR: Insertando descuento"
                BorraYTermina(1)
                Exit Function
            End If
            ' Descuento 2
            lStrValor = 0
            lRet = SDK_AdminPAQ.fSetDatoMovimiento("cDescuento2", lStrValor)
            If lRet <> 0 Then
                EnviaAdminPAQ = "NOERROR: Insertando descuento 2"
                BorraYTermina(1)
                Exit Function
            End If
            ' Impuesto 1
            lStrValor = 0
            lRet = SDK_AdminPAQ.fSetDatoMovimiento("cImpuesto1", lStrValor)
            If lRet <> 0 Then
                MensajeError(lRet)
                EnviaAdminPAQ = "NOERROR: Insertando impuesto"
                BorraYTermina(1)
                Exit Function
            End If
            ' Impuesto 2
            lStrValor = 0
            lRet = SDK_AdminPAQ.fSetDatoMovimiento("cImpuesto2", lStrValor)
            If lRet <> 0 Then
                EnviaAdminPAQ = "NOERROR: Insertando impuesto 2"
                BorraYTermina(1)
                Exit Function
            End If
            'El Total se calcula en el SDK de AdminPAQ
            ' Guarda los datos del movimiento
            lRet = SDK_AdminPAQ.fGuardaMovimiento()
            If lRet <> 0 Then
                EnviaAdminPAQ = "NOERROR: Guardando movimiento"
                BorraYTermina(1)
                Exit Function
            End If
        End If
        lRet = SDK_AdminPAQ.fAfectaDocto_Param(CodigoConcepto, Serie, Folio, True)
        If lRet <> 0 Then
            EnviaAdminPAQ = "NOERROR: Afecta documento"
            BorraYTermina(1)
            Exit Function
        End If
        'Todas las intrucciones que estan dentro del ciclo for, se ejecutaran hasta que se envie_
        'el ultimo de los registros del datagrid
        EnviaAdminPAQ = "SI"
    End Function
    Private Sub BorraYTermina(ByVal aTipo As Integer)
        If aTipo = 1 Then
            SDK_AdminPAQ.fCancelaCambiosMovimiento()
            SDK_AdminPAQ.fBorraDocumento()
        Else
            SDK_AdminPAQ.fCancelarModificacionDocumento()

        End If
    End Sub
End Class
